package com.xhdx.string;

public class TestStri {
    /**
     * 以下程序输出的结果是什么？
     */
    public static void test() {
        String str1 = "what";
        String str2 = str1 + " a nice day";
        System.out.println("what a nice day".equals(str2));
        System.out.println("what a nice day" == str2);
    }

    /**
     * 以下程序输出的结果是什么？
     */
    public static void test1() {
        String str1 = "what a nice day";
        String str2 = new String("what a nice day");
        System.out.println(str1.equals(str2));
        System.out.println(str1 == str2);
    }

    /**
     * 以下程序输出的结果是什么？
     */
    public static void test2() {
        String str1 = "what";
        String str2 = str1.concat(" a nice day");
        System.out.println("what a nice day".equals(str2));
        System.out.println("what a nice day" == str2);
        System.out.println("what a nice day" == str2.intern());
    }

    public static void main(String[] args) {
        // test();
        // System.out.println("=========================");
        // test1();
        // System.out.println("=========================");
        // test2();
        // System.out.println("=========================");
        // String a1 = "AA";//在常量池上创建常量AA
        // String a2 = "AA";//直接返回已经存在的常量AA
        // System.out.println(a1 == a2); //true
        String aa = "AA";// 设置常量AA到常量池
        String bb = "BB";// 设置常量BB到常量池
        String ccdd = "CC" + "DD";// 设置常量CCDD到常量池
        String neeff = new String("EE") + new String("FF");// 设置EE和FF到常量池。并且添加EE、FF和EEFF对象到堆
        String aabb = aa + bb;// 添加AABB对象到堆
        String gghh = "GG" + new String("HH");// 设置GG和HH常量到常量池,设置HH和GGHH对象到堆
        // aa.intern();//啥事都不做，返回AA常量
        // ccdd.intern();//啥事都不做，返回CCDD常量
        // neeff.intern();//添加EEFF对象的引用到常量池，并返回EEFF对象
        // aabb.intern();//添加AABB对象的引用到常量池，并返回AABB对象
        // gghh.intern();//添加GGHH对象的引用到常量池，并返回GGHH对象
        System.out.println(aa.intern() == aa); // true
        System.out.println("EEFF" == neeff);// false
        System.out.println(neeff.intern() == "EEFF");// true
        System.out.println("EEFF" == neeff.intern());// true
        String nccdd = new String("CCDD");
        System.out.println(ccdd == nccdd);// false
        System.out.println(ccdd == nccdd.intern());// true
        System.out.println(aabb.intern() == aabb);// true
        System.out.println(gghh == gghh.intern());// true
    }
}
